# 完全重建脚本，确保正确的缩进和基本结构
import os
import shutil

# 文件路径
original_file = r'd:\未知\yolo_apply\video_processing\video_processor.py'
final_backup = r'd:\未知\yolo_apply\video_processing\video_processor.py.final_backup'
temp_file = r'd:\未知\yolo_apply\video_processing\video_processor_rebuilt.py'

# 确保我们使用最终备份
if os.path.exists(final_backup):
    print(f"使用最终备份文件: {final_backup}")
    
    # 读取文件内容
    with open(final_backup, 'r', encoding='utf-8', errors='replace') as f:
        all_content = f.read()
    
    # 创建一个新的干净文件
    with open(temp_file, 'w', encoding='utf-8', newline='\n') as f:
        # 首先写入导入语句和类定义之前的内容
        # 查找VideoProcessor类的定义
        class_start = all_content.find('class VideoProcessor')
        if class_start >= 0:
            # 写入类定义之前的内容
            f.write(all_content[:class_start])
            f.write('\n')
            
            # 处理VideoProcessor类
            class_content = all_content[class_start:]
            
            # 查找类定义行
            class_def_end = class_content.find(':\n') + 2
            f.write(class_content[:class_def_end])
            
            # 处理类的内容，包括方法
            # 简单方法：按行处理，确保基本缩进
            class_body = class_content[class_def_end:]
            lines = class_body.split('\n')
            
            in_process_loop = False
            indent_level = 4  # 类内部的基本缩进
            
            for line in lines:
                stripped = line.strip()
                
                # 跳过空行
                if not stripped:
                    f.write('\n')
                    continue
                
                # 检查是否进入_process_loop方法
                if stripped.startswith('def _process_loop') and ':' in stripped:
                    in_process_loop = True
                    f.write(' ' * indent_level + stripped + '\n')
                    indent_level += 4  # 增加缩进
                    continue
                
                # 检查是否退出_process_loop方法
                if in_process_loop and stripped.startswith('def ') and ':' in stripped:
                    in_process_loop = False
                    indent_level -= 4  # 减少缩进
                    f.write(' ' * indent_level + stripped + '\n')
                    indent_level += 4  # 为新方法增加缩进
                    continue
                
                # 在_process_loop方法内，特别处理
                if in_process_loop:
                    # 如果是问题区域的开始注释
                    if '# 错误率过高时触发警告和恢复' in stripped:
                        f.write(' ' * indent_level + '# 错误率过高时触发警告和恢复\n')
                        # 添加error_count初始化，但跳过其他问题代码
                        f.write(' ' * indent_level + 'error_count = 0\n')
                    # 跳过问题区域内的其他行
                    elif 'time.time()' in stripped or 'current_time' in stripped or 'error_count' in stripped:
                        continue
                    # 对于其他代码行，确保正确的缩进
                    elif stripped:
                        f.write(' ' * indent_level + stripped + '\n')
                # 对于其他方法和类内容，保持基本结构
                else:
                    if stripped.startswith('def ') and ':' in stripped:
                        # 方法定义
                        f.write(' ' * indent_level + stripped + '\n')
                        indent_level += 4  # 增加缩进
                    elif stripped.startswith('return') or stripped.startswith('if ') or stripped.startswith('for ') or stripped.startswith('while ') or stripped.startswith('try:') or stripped.startswith('except') or stripped.startswith('else:') or stripped.startswith('finally:'):
                        # 常见代码行
                        f.write(' ' * indent_level + stripped + '\n')
                    elif stripped == 'pass' or stripped.startswith('#'):
                        # pass语句或注释
                        f.write(' ' * indent_level + stripped + '\n')
                    elif stripped == '':
                        f.write('\n')
                    else:
                        # 其他内容
                        f.write(' ' * indent_level + stripped + '\n')
        else:
            print("警告: 找不到VideoProcessor类定义，将保留整个文件")
            f.write(all_content)
    
    print(f"已创建完全重建的临时文件: {temp_file}")
    
    # 替换原文件
    os.replace(temp_file, original_file)
    print(f"已用重建的文件替换原文件")
    print("现在让我们再次尝试编译...")
else:
    print(f"错误: 找不到最终备份文件 {final_backup}")